﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using System.Data.SqlClient;

namespace Grupo2.Persistencia
{
    public class PostulacionDAO
    {
        //  Atributos
        //  private String cadenaConexion = "Data Source=LOCALHOST;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";
        //  private String cadenaConexion = @"Data Source= FW-LAPTOP\SQLEXPRESS;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";

        private String cadenaConexion = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Grupo2;Data Source=localhost";
        
        private SqlConnection conexion;

        public PostulacionDAO()
        {
            conexion = new SqlConnection(cadenaConexion);
        }

         public Postulacion CrearPostulacion(Postulacion postulacion)
         {
          conexion.Open();

          String sentencia = "INSERT INTO Postulacion ( " +
                                        "Id_Postulacion," +
                                        "Id_Aviso," +
                                        "Id_Postulante," +
                                        "Fecha_Postulacion," +
                                        "Estado_Postulacion," +
                                        "Postulacion_Seleccionada," +
                                        "Fecha_Seleccion" +
                                        ")" +
                                         "VALUES(" +
                                       postulacion.Id_Postulacion + "," +
                                       postulacion.Aviso.Id_Aviso + "," +
                                       postulacion.Postulante.Id_Postulante + ",'" +
                                       postulacion.Fecha_Postulacion + "','" +
                                       postulacion.Estado_Postulacion + "','" +
                                       postulacion.Postulacion_Seleccionada + "','" +
                                       postulacion.Fecha_Seleccion + 
                                       "')";
          Console.WriteLine(sentencia);
          SqlCommand comando = new SqlCommand(sentencia, conexion);
          comando.ExecuteNonQuery();
          conexion.Close();
          return postulacion;
         }

         public Postulacion ObtenerPostulacion(Int32 Id_Postulacion)
         {
             conexion.Open();
   
             String sentencia = "SELECT * FROM Postulacion WHERE Id_Postulacion=" + Id_Postulacion;
             SqlCommand comando = new SqlCommand(sentencia, conexion);
             SqlDataReader resultado = comando.ExecuteReader();
             Postulacion postulacion = new Postulacion();
             //
             if (resultado.HasRows) 
             {
                 resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1

                 postulacion.Id_Postulacion = Convert.ToInt32(resultado["Id_Postulacion"]);
                 postulacion.Aviso.Id_Aviso = Convert.ToInt32(resultado["Id_Aviso"]);
                 postulacion.Postulante.Id_Postulante = Convert.ToInt32(resultado["Id_Postulante"]);
                 postulacion.Fecha_Postulacion = (DateTime)resultado["Fecha_Postulacion"];
                 //postulacion.Fecha_Postulacion = Convert.ToDateTime(resultado["Fecha_Postulacion"]);
                 postulacion.Estado_Postulacion = (String)resultado["Estado_Postulacion"];
                 //postulacion.Postulacion_Seleccionada = (Boolean)resultado["Postulacion_Seleccionada"];
                 //postulacion.Postulacion_Seleccionada = Boolean.Parse((String)resultado["Postulacion_Seleccionada"]);
                 postulacion.Postulacion_Seleccionada = (String)resultado["Postulacion_Seleccionada"];
                 postulacion.Fecha_Seleccion = (DateTime)resultado["Fecha_Seleccion"];
                 //postulacion.Fecha_Seleccion = Convert.ToDateTime(resultado["Fecha_Seleccion"]);
              }
             else 
             {
               //throw new Exception("La Postulacion solicitada no existe en la BD");
                 postulacion = null;
             }
             conexion.Close();
             return postulacion;
         }

        public Postulacion ModificarPostulacion(Postulacion postulacion)
         {
             conexion.Open();
             String sentencia = "UPDATE Postulacion SET " +
                                " Puesto_Trabajo='" +
                                 postulacion.Estado_Postulacion + "'" +
                                " WHERE Id_Postulacion=" + postulacion.Id_Postulacion
                                ;
             SqlCommand comando = new SqlCommand(sentencia, conexion);
             comando.ExecuteNonQuery();
             conexion.Close();
             return this.ObtenerPostulacion(postulacion.Id_Postulacion); 
         }

        public void EliminarPostulacion(Int32 nId_Postulacion)
        {
            conexion.Open();
            String sentencia = "DELETE FROM postulacion WHERE Id_Postulacion=" + nId_Postulacion;
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            conexion.Close();
            return;
        }

        public Postulacion ObtenerPostulacion_2(Int32 id_postulante, Int32 id_aviso)
        {
            conexion.Open();
            String sentencia = "SELECT * FROM Postulacion WHERE Id_Postulante=" + id_postulante +
                               " AND Id_aviso=" + id_aviso
            ;
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();
            Postulacion postulacion = new Postulacion();
            //
            if (resultado.HasRows)
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1

                postulacion.Id_Postulacion = Convert.ToInt32(resultado["Id_Postulacion"]);
                postulacion.Aviso.Id_Aviso = Convert.ToInt32(resultado["Id_Aviso"]);
                postulacion.Postulante.Id_Postulante = Convert.ToInt32(resultado["Id_Postulante"]);
                postulacion.Fecha_Postulacion = (DateTime)resultado["Fecha_Postulacion"];
                //postulacion.Fecha_Postulacion = Convert.ToDateTime(resultado["Fecha_Postulacion"]);
                postulacion.Estado_Postulacion = (String)resultado["Estado_Postulacion"];
                //postulacion.Postulacion_Seleccionada = (Boolean)resultado["Postulacion_Seleccionada"];
                //postulacion.Postulacion_Seleccionada = Boolean.Parse((String)resultado["Postulacion_Seleccionada"]);
                postulacion.Postulacion_Seleccionada = (String)resultado["Postulacion_Seleccionada"];
                postulacion.Fecha_Seleccion = (DateTime)resultado["Fecha_Seleccion"];
                //postulacion.Fecha_Seleccion = Convert.ToDateTime(resultado["Fecha_Seleccion"]);
            }
            else
            {
                throw new Exception("La Postulacion solicitada no existe en la BD");
                //postulacion = null;
            }
            conexion.Close();
            return postulacion;
        }

        public Postulacion GrabarSeleccion(Postulacion postulacion)
        {
            conexion.Open();
            String sentencia = "UPDATE Postulacion SET " +
                               " postulacion_seleccionada='S'" +
                               ",fecha_seleccion='" + "18JUN2011'" + 
                               " WHERE Id_Postulacion=" + postulacion.Id_Postulacion
                               ;
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            return postulacion;   // this.ObtenerPostulacion(id_postulacion);
        }

    }

}